#ifndef _STDLIB_H
#define _STDLIB_H


#ifndef NULL
#define NULL ((void *) 0)
#endif /* NULL */

#define RAND_MAX 32767

typedef long int time_t;



/*
 * Funcion: atol
 * -------------
 * Descripcion de la GNU C Library (http://www.gnu.org/software/libc/):
 * This function is similar to the strtol function with a base argument of
 * 10, except that it need not detect overflow errors.
 */
long int atol (const char *string);

/*
 * Funcion: atoi
 * -------------
 * Descripcion de la GNU C Library (http://www.gnu.org/software/libc/):
 * This function is like atol, except that it returns an int.
 */
int atoi (const char *string);

/*
 * Funciones: abs, labs
 * --------------------
 * Descripcion de la GNU C Library (http://www.gnu.org/software/libc/):
 * These functions return the absolute value of number.
 */
int abs (int number);
long int labs (long int number);

/*
 * Funcion: rand
 * -------------
 * Descripcion de la GNU C Library (http://www.gnu.org/software/libc/):
 * The rand function returns the next pseudo-random number in the series.
 * The value ranges from 0 to RAND_MAX.
 *
 * Se asume que RAND_MAX es 32767.
 */
int rand(void);

/*
 * Funcion: srand
 * --------------
 * Descripcin de la GNU C Library (http://www.gnu.org/software/libc/):
 * This function establishes seed as the seed for a new series of
 * pseudo-random numbers. If you call rand before a seed has been
 * established with srand, it uses the value 1 as a default seed.
 */
void srand(unsigned seed);

/*
 * Funcion: time
 * -------------
 * Descripcion de la GNU C Library (http://www.gnu.org/software/libc/):
 * The time function returns the current calendar time as a value of type
 * time_t. If the argument result is not a null pointer, the calendar time
 * value is also stored in *result. If the current calendar time is not
 * available, the value (time_t)(-1) is returned.
 * time_t is the data type used to represent simple time. Sometimes, it also
 * represents an elapsed time. When interpreted as a calendar time value,
 * it represents the number of seconds elapsed since 00:00:00 on January 1,
 * 1970, Coordinated Universal Time.
 *
 * Notas de implementacion:
 * Para simplicidad y eficiencia, en esta implementacion la cuenta de
 * segundos transcurridos es imprecisa. Todos los años
 * se consideran de 365 dias y todos los meses de 30 dias.
 */
time_t time(time_t *result);

/*
 * Funciones: gettime, settime
 * ---------------------------
 * Permiten obtener y establecer la fecha y hora actual en el sistema.
 * Los parametros son año, mes, dia, hora, minutos y segundos en ese orden,
 * siendo de salida (por punteros) y de entrada (por valor) respectivamente.
 * Devuelven un valor distinto de cero si se llevan a cabo exitosamente.
 */
int gettime(int *year, int *month, int *day, int *hour, int *min, int *sec);
int settime(int year, int month, int day, int hour, int min, int sec);

/*
 * Funciones: readcmos, writecmos
 * ------------------------------
 * Estas funciones leen y escriben valores en BCD en el registro nro. reg
 * del CMOS Real Time Clock.
 */
int readcmos(int reg);
int writecmos(int value, int reg);

/*
 * Funciones: malloc, Calloc
 * ------------------------------
 * Estas funciones son utilizadas para obtener memoria del heap del proceso 
 * que se esta ejecutando. Calloc inicializa la memoria en 0.
 */
void* malloc(int size);
void * Calloc(int size);

#endif /* _STDLIB_H */

